#pragma once

#include <luisa/core/basic_types.h>

namespace luisa::test::spectrum {
// from https://cie.co.at/data-tables

std::pair<int, luisa::float3> CIE_xyz_1931_2deg[]{
    std::pair{360, luisa::float3{0.000129900000, 0.0000039170000, 0.000606100000}},
    std::pair{361, luisa::float3{0.000145847000, 0.0000043935810, 0.000680879200}},
    std::pair{362, luisa::float3{0.000163802100, 0.0000049296040, 0.000765145600}},
    std::pair{363, luisa::float3{0.000184003700, 0.0000055321360, 0.000860012400}},
    std::pair{364, luisa::float3{0.000206690200, 0.0000062082450, 0.000966592800}},
    std::pair{365, luisa::float3{0.000232100000, 0.0000069650000, 0.001086000000}},
    std::pair{366, luisa::float3{0.000260728000, 0.0000078132190, 0.001220586000}},
    std::pair{367, luisa::float3{0.000293075000, 0.0000087673360, 0.001372729000}},
    std::pair{368, luisa::float3{0.000329388000, 0.0000098398440, 0.001543579000}},
    std::pair{369, luisa::float3{0.000369914000, 0.0000110432300, 0.001734286000}},
    std::pair{370, luisa::float3{0.000414900000, 0.0000123900000, 0.001946000000}},
    std::pair{371, luisa::float3{0.000464158700, 0.0000138864100, 0.002177777000}},
    std::pair{372, luisa::float3{0.000518986000, 0.0000155572800, 0.002435809000}},
    std::pair{373, luisa::float3{0.000581854000, 0.0000174429600, 0.002731953000}},
    std::pair{374, luisa::float3{0.000655234700, 0.0000195837500, 0.003078064000}},
    std::pair{375, luisa::float3{0.000741600000, 0.0000220200000, 0.003486000000}},
    std::pair{376, luisa::float3{0.000845029600, 0.0000248396500, 0.003975227000}},
    std::pair{377, luisa::float3{0.000964526800, 0.0000280412600, 0.004540880000}},
    std::pair{378, luisa::float3{0.001094949000, 0.0000315310400, 0.005158320000}},
    std::pair{379, luisa::float3{0.001231154000, 0.0000352152100, 0.005802907000}},
    std::pair{380, luisa::float3{0.001368000000, 0.0000390000000, 0.006450001000}},
    std::pair{381, luisa::float3{0.001502050000, 0.0000428264000, 0.007083216000}},
    std::pair{382, luisa::float3{0.001642328000, 0.0000469146000, 0.007745488000}},
    std::pair{383, luisa::float3{0.001802382000, 0.0000515896000, 0.008501152000}},
    std::pair{384, luisa::float3{0.001995757000, 0.0000571764000, 0.009414544000}},
    std::pair{385, luisa::float3{0.002236000000, 0.0000640000000, 0.010549990000}},
    std::pair{386, luisa::float3{0.002535385000, 0.0000723442100, 0.011965800000}},
    std::pair{387, luisa::float3{0.002892603000, 0.0000822122400, 0.013655870000}},
    std::pair{388, luisa::float3{0.003300829000, 0.0000935081600, 0.015588050000}},
    std::pair{389, luisa::float3{0.003753236000, 0.0001061361000, 0.017730150000}},
    std::pair{390, luisa::float3{0.004243000000, 0.0001200000000, 0.020050010000}},
    std::pair{391, luisa::float3{0.004762389000, 0.0001349840000, 0.022511360000}},
    std::pair{392, luisa::float3{0.005330048000, 0.0001514920000, 0.025202880000}},
    std::pair{393, luisa::float3{0.005978712000, 0.0001702080000, 0.028279720000}},
    std::pair{394, luisa::float3{0.006741117000, 0.0001918160000, 0.031897040000}},
    std::pair{395, luisa::float3{0.007650000000, 0.0002170000000, 0.036210000000}},
    std::pair{396, luisa::float3{0.008751373000, 0.0002469067000, 0.041437710000}},
    std::pair{397, luisa::float3{0.010028880000, 0.0002812400000, 0.047503720000}},
    std::pair{398, luisa::float3{0.011421700000, 0.0003185200000, 0.054119880000}},
    std::pair{399, luisa::float3{0.012869010000, 0.0003572667000, 0.060998030000}},
    std::pair{400, luisa::float3{0.014310000000, 0.0003960000000, 0.067850010000}},
    std::pair{401, luisa::float3{0.015704430000, 0.0004337147000, 0.074486320000}},
    std::pair{402, luisa::float3{0.017147440000, 0.0004730240000, 0.081361560000}},
    std::pair{403, luisa::float3{0.018781220000, 0.0005178760000, 0.089153640000}},
    std::pair{404, luisa::float3{0.020748010000, 0.0005722187000, 0.098540480000}},
    std::pair{405, luisa::float3{0.023190000000, 0.0006400000000, 0.110200000000}},
    std::pair{406, luisa::float3{0.026207360000, 0.0007245600000, 0.124613300000}},
    std::pair{407, luisa::float3{0.029782480000, 0.0008255000000, 0.141701700000}},
    std::pair{408, luisa::float3{0.033880920000, 0.0009411600000, 0.161303500000}},
    std::pair{409, luisa::float3{0.038468240000, 0.0010698800000, 0.183256800000}},
    std::pair{410, luisa::float3{0.043510000000, 0.0012100000000, 0.207400000000}},
    std::pair{411, luisa::float3{0.048995600000, 0.0013620910000, 0.233692100000}},
    std::pair{412, luisa::float3{0.055022600000, 0.0015307520000, 0.262611400000}},
    std::pair{413, luisa::float3{0.061718800000, 0.0017203680000, 0.294774600000}},
    std::pair{414, luisa::float3{0.069212000000, 0.0019353230000, 0.330798500000}},
    std::pair{415, luisa::float3{0.077630000000, 0.0021800000000, 0.371300000000}},
    std::pair{416, luisa::float3{0.086958110000, 0.0024548000000, 0.416209100000}},
    std::pair{417, luisa::float3{0.097176720000, 0.0027640000000, 0.465464200000}},
    std::pair{418, luisa::float3{0.108406300000, 0.0031178000000, 0.519694800000}},
    std::pair{419, luisa::float3{0.120767200000, 0.0035264000000, 0.579530300000}},
    std::pair{420, luisa::float3{0.134380000000, 0.0040000000000, 0.645600000000}},
    std::pair{421, luisa::float3{0.149358200000, 0.0045462400000, 0.718483800000}},
    std::pair{422, luisa::float3{0.165395700000, 0.0051593200000, 0.796713300000}},
    std::pair{423, luisa::float3{0.181983100000, 0.0058292800000, 0.877845900000}},
    std::pair{424, luisa::float3{0.198611000000, 0.0065461600000, 0.959439000000}},
    std::pair{425, luisa::float3{0.214770000000, 0.0073000000000, 1.039050100000}},
    std::pair{426, luisa::float3{0.230186800000, 0.0080865070000, 1.115367300000}},
    std::pair{427, luisa::float3{0.244879700000, 0.0089087200000, 1.188497100000}},
    std::pair{428, luisa::float3{0.258777300000, 0.0097676800000, 1.258123300000}},
    std::pair{429, luisa::float3{0.271807900000, 0.0106644300000, 1.323929600000}},
    std::pair{430, luisa::float3{0.283900000000, 0.0116000000000, 1.385600000000}},
    std::pair{431, luisa::float3{0.294943800000, 0.0125731700000, 1.442635200000}},
    std::pair{432, luisa::float3{0.304896500000, 0.0135827200000, 1.494803500000}},
    std::pair{433, luisa::float3{0.313787300000, 0.0146296800000, 1.542190300000}},
    std::pair{434, luisa::float3{0.321645400000, 0.0157150900000, 1.584880700000}},
    std::pair{435, luisa::float3{0.328500000000, 0.0168400000000, 1.622960000000}},
    std::pair{436, luisa::float3{0.334351300000, 0.0180073600000, 1.656404800000}},
    std::pair{437, luisa::float3{0.339210100000, 0.0192144800000, 1.685295900000}},
    std::pair{438, luisa::float3{0.343121300000, 0.0204539200000, 1.709874500000}},
    std::pair{439, luisa::float3{0.346129600000, 0.0217182400000, 1.730382100000}},
    std::pair{440, luisa::float3{0.348280000000, 0.0230000000000, 1.747060000000}},
    std::pair{441, luisa::float3{0.349599900000, 0.0242946100000, 1.760044600000}},
    std::pair{442, luisa::float3{0.350147400000, 0.0256102400000, 1.769623300000}},
    std::pair{443, luisa::float3{0.350013000000, 0.0269585700000, 1.776263700000}},
    std::pair{444, luisa::float3{0.349287000000, 0.0283512500000, 1.780433400000}},
    std::pair{445, luisa::float3{0.348060000000, 0.0298000000000, 1.782600000000}},
    std::pair{446, luisa::float3{0.346373300000, 0.0313108300000, 1.782968200000}},
    std::pair{447, luisa::float3{0.344262400000, 0.0328836800000, 1.781699800000}},
    std::pair{448, luisa::float3{0.341808800000, 0.0345211200000, 1.779198200000}},
    std::pair{449, luisa::float3{0.339094100000, 0.0362257100000, 1.775867100000}},
    std::pair{450, luisa::float3{0.336200000000, 0.0380000000000, 1.772110000000}},
    std::pair{451, luisa::float3{0.333197700000, 0.0398466700000, 1.768258900000}},
    std::pair{452, luisa::float3{0.330041100000, 0.0417680000000, 1.764039000000}},
    std::pair{453, luisa::float3{0.326635700000, 0.0437660000000, 1.758943800000}},
    std::pair{454, luisa::float3{0.322886800000, 0.0458426700000, 1.752466300000}},
    std::pair{455, luisa::float3{0.318700000000, 0.0480000000000, 1.744100000000}},
    std::pair{456, luisa::float3{0.314025100000, 0.0502436800000, 1.733559500000}},
    std::pair{457, luisa::float3{0.308884000000, 0.0525730400000, 1.720858100000}},
    std::pair{458, luisa::float3{0.303290400000, 0.0549805600000, 1.705936900000}},
    std::pair{459, luisa::float3{0.297257900000, 0.0574587200000, 1.688737200000}},
    std::pair{460, luisa::float3{0.290800000000, 0.0600000000000, 1.669200000000}},
    std::pair{461, luisa::float3{0.283970100000, 0.0626019700000, 1.647528700000}},
    std::pair{462, luisa::float3{0.276721400000, 0.0652775200000, 1.623412700000}},
    std::pair{463, luisa::float3{0.268917800000, 0.0680420800000, 1.596022300000}},
    std::pair{464, luisa::float3{0.260422700000, 0.0709110900000, 1.564528000000}},
    std::pair{465, luisa::float3{0.251100000000, 0.0739000000000, 1.528100000000}},
    std::pair{466, luisa::float3{0.240847500000, 0.0770160000000, 1.486111400000}},
    std::pair{467, luisa::float3{0.229851200000, 0.0802664000000, 1.439521500000}},
    std::pair{468, luisa::float3{0.218407200000, 0.0836668000000, 1.389879900000}},
    std::pair{469, luisa::float3{0.206811500000, 0.0872328000000, 1.338736200000}},
    std::pair{470, luisa::float3{0.195360000000, 0.0909800000000, 1.287640000000}},
    std::pair{471, luisa::float3{0.184213600000, 0.0949175500000, 1.237422300000}},
    std::pair{472, luisa::float3{0.173327300000, 0.0990458400000, 1.187824300000}},
    std::pair{473, luisa::float3{0.162688100000, 0.1033674000000, 1.138761100000}},
    std::pair{474, luisa::float3{0.152283300000, 0.1078846000000, 1.090148000000}},
    std::pair{475, luisa::float3{0.142100000000, 0.1126000000000, 1.041900000000}},
    std::pair{476, luisa::float3{0.132178600000, 0.1175320000000, 0.994197600000}},
    std::pair{477, luisa::float3{0.122569600000, 0.1226744000000, 0.947347300000}},
    std::pair{478, luisa::float3{0.113275200000, 0.1279928000000, 0.901453100000}},
    std::pair{479, luisa::float3{0.104297900000, 0.1334528000000, 0.856619300000}},
    std::pair{480, luisa::float3{0.095640000000, 0.1390200000000, 0.812950100000}},
    std::pair{481, luisa::float3{0.087299550000, 0.1446764000000, 0.770517300000}},
    std::pair{482, luisa::float3{0.079308040000, 0.1504693000000, 0.729444800000}},
    std::pair{483, luisa::float3{0.071717760000, 0.1564619000000, 0.689913600000}},
    std::pair{484, luisa::float3{0.064580990000, 0.1627177000000, 0.652104900000}},
    std::pair{485, luisa::float3{0.057950010000, 0.1693000000000, 0.616200000000}},
    std::pair{486, luisa::float3{0.051862110000, 0.1762431000000, 0.582328600000}},
    std::pair{487, luisa::float3{0.046281520000, 0.1835581000000, 0.550416200000}},
    std::pair{488, luisa::float3{0.041150880000, 0.1912735000000, 0.520337600000}},
    std::pair{489, luisa::float3{0.036412830000, 0.1994180000000, 0.491967300000}},
    std::pair{490, luisa::float3{0.032010000000, 0.2080200000000, 0.465180000000}},
    std::pair{491, luisa::float3{0.027917200000, 0.2171199000000, 0.439924600000}},
    std::pair{492, luisa::float3{0.024144400000, 0.2267345000000, 0.416183600000}},
    std::pair{493, luisa::float3{0.020687000000, 0.2368571000000, 0.393882200000}},
    std::pair{494, luisa::float3{0.017540400000, 0.2474812000000, 0.372945900000}},
    std::pair{495, luisa::float3{0.014700000000, 0.2586000000000, 0.353300000000}},
    std::pair{496, luisa::float3{0.012161790000, 0.2701849000000, 0.334857800000}},
    std::pair{497, luisa::float3{0.009919960000, 0.2822939000000, 0.317552100000}},
    std::pair{498, luisa::float3{0.007967240000, 0.2950505000000, 0.301337500000}},
    std::pair{499, luisa::float3{0.006296346000, 0.3085780000000, 0.286168600000}},
    std::pair{500, luisa::float3{0.004900000000, 0.3230000000000, 0.272000000000}},
    std::pair{501, luisa::float3{0.003777173000, 0.3384021000000, 0.258817100000}},
    std::pair{502, luisa::float3{0.002945320000, 0.3546858000000, 0.246483800000}},
    std::pair{503, luisa::float3{0.002424880000, 0.3716986000000, 0.234771800000}},
    std::pair{504, luisa::float3{0.002236293000, 0.3892875000000, 0.223453300000}},
    std::pair{505, luisa::float3{0.002400000000, 0.4073000000000, 0.212300000000}},
    std::pair{506, luisa::float3{0.002925520000, 0.4256299000000, 0.201169200000}},
    std::pair{507, luisa::float3{0.003836560000, 0.4443096000000, 0.190119600000}},
    std::pair{508, luisa::float3{0.005174840000, 0.4633944000000, 0.179225400000}},
    std::pair{509, luisa::float3{0.006982080000, 0.4829395000000, 0.168560800000}},
    std::pair{510, luisa::float3{0.009300000000, 0.5030000000000, 0.158200000000}},
    std::pair{511, luisa::float3{0.012149490000, 0.5235693000000, 0.148138300000}},
    std::pair{512, luisa::float3{0.015535880000, 0.5445120000000, 0.138375800000}},
    std::pair{513, luisa::float3{0.019477520000, 0.5656900000000, 0.128994200000}},
    std::pair{514, luisa::float3{0.023992770000, 0.5869653000000, 0.120075100000}},
    std::pair{515, luisa::float3{0.029100000000, 0.6082000000000, 0.111700000000}},
    std::pair{516, luisa::float3{0.034814850000, 0.6293456000000, 0.103904800000}},
    std::pair{517, luisa::float3{0.041120160000, 0.6503068000000, 0.096667480000}},
    std::pair{518, luisa::float3{0.047985040000, 0.6708752000000, 0.089982720000}},
    std::pair{519, luisa::float3{0.055378610000, 0.6908424000000, 0.083845310000}},
    std::pair{520, luisa::float3{0.063270000000, 0.7100000000000, 0.078249990000}},
    std::pair{521, luisa::float3{0.071635010000, 0.7281852000000, 0.073208990000}},
    std::pair{522, luisa::float3{0.080462240000, 0.7454636000000, 0.068678160000}},
    std::pair{523, luisa::float3{0.089739960000, 0.7619694000000, 0.064567840000}},
    std::pair{524, luisa::float3{0.099456450000, 0.7778368000000, 0.060788350000}},
    std::pair{525, luisa::float3{0.109600000000, 0.7932000000000, 0.057250010000}},
    std::pair{526, luisa::float3{0.120167400000, 0.8081104000000, 0.053904350000}},
    std::pair{527, luisa::float3{0.131114500000, 0.8224962000000, 0.050746640000}},
    std::pair{528, luisa::float3{0.142367900000, 0.8363068000000, 0.047752760000}},
    std::pair{529, luisa::float3{0.153854200000, 0.8494916000000, 0.044898590000}},
    std::pair{530, luisa::float3{0.165500000000, 0.8620000000000, 0.042160000000}},
    std::pair{531, luisa::float3{0.177257100000, 0.8738108000000, 0.039507280000}},
    std::pair{532, luisa::float3{0.189140000000, 0.8849624000000, 0.036935640000}},
    std::pair{533, luisa::float3{0.201169400000, 0.8954936000000, 0.034458360000}},
    std::pair{534, luisa::float3{0.213365800000, 0.9054432000000, 0.032088720000}},
    std::pair{535, luisa::float3{0.225749900000, 0.9148501000000, 0.029840000000}},
    std::pair{536, luisa::float3{0.238320900000, 0.9237348000000, 0.027711810000}},
    std::pair{537, luisa::float3{0.251066800000, 0.9320924000000, 0.025694440000}},
    std::pair{538, luisa::float3{0.263992200000, 0.9399226000000, 0.023787160000}},
    std::pair{539, luisa::float3{0.277101700000, 0.9472252000000, 0.021989250000}},
    std::pair{540, luisa::float3{0.290400000000, 0.9540000000000, 0.020300000000}},
    std::pair{541, luisa::float3{0.303891200000, 0.9602561000000, 0.018718050000}},
    std::pair{542, luisa::float3{0.317572600000, 0.9660074000000, 0.017240360000}},
    std::pair{543, luisa::float3{0.331438400000, 0.9712606000000, 0.015863640000}},
    std::pair{544, luisa::float3{0.345482800000, 0.9760225000000, 0.014584610000}},
    std::pair{545, luisa::float3{0.359700000000, 0.9803000000000, 0.013400000000}},
    std::pair{546, luisa::float3{0.374083900000, 0.9840924000000, 0.012307230000}},
    std::pair{547, luisa::float3{0.388639600000, 0.9874182000000, 0.011301880000}},
    std::pair{548, luisa::float3{0.403378400000, 0.9903128000000, 0.010377920000}},
    std::pair{549, luisa::float3{0.418311500000, 0.9928116000000, 0.009529306000}},
    std::pair{550, luisa::float3{0.433449900000, 0.9949501000000, 0.008749999000}},
    std::pair{551, luisa::float3{0.448795300000, 0.9967108000000, 0.008035200000}},
    std::pair{552, luisa::float3{0.464336000000, 0.9980983000000, 0.007381600000}},
    std::pair{553, luisa::float3{0.480064000000, 0.9991120000000, 0.006785400000}},
    std::pair{554, luisa::float3{0.495971300000, 0.9997482000000, 0.006242800000}},
    std::pair{555, luisa::float3{0.512050100000, 1.0000000000000, 0.005749999000}},
    std::pair{556, luisa::float3{0.528295900000, 0.9998567000000, 0.005303600000}},
    std::pair{557, luisa::float3{0.544691600000, 0.9993046000000, 0.004899800000}},
    std::pair{558, luisa::float3{0.561209400000, 0.9983255000000, 0.004534200000}},
    std::pair{559, luisa::float3{0.577821500000, 0.9968987000000, 0.004202400000}},
    std::pair{560, luisa::float3{0.594500000000, 0.9950000000000, 0.003900000000}},
    std::pair{561, luisa::float3{0.611220900000, 0.9926005000000, 0.003623200000}},
    std::pair{562, luisa::float3{0.627975800000, 0.9897426000000, 0.003370600000}},
    std::pair{563, luisa::float3{0.644760200000, 0.9864444000000, 0.003141400000}},
    std::pair{564, luisa::float3{0.661569700000, 0.9827241000000, 0.002934800000}},
    std::pair{565, luisa::float3{0.678400000000, 0.9786000000000, 0.002749999000}},
    std::pair{566, luisa::float3{0.695239200000, 0.9740837000000, 0.002585200000}},
    std::pair{567, luisa::float3{0.712058600000, 0.9691712000000, 0.002438600000}},
    std::pair{568, luisa::float3{0.728828400000, 0.9638568000000, 0.002309400000}},
    std::pair{569, luisa::float3{0.745518800000, 0.9581349000000, 0.002196800000}},
    std::pair{570, luisa::float3{0.762100000000, 0.9520000000000, 0.002100000000}},
    std::pair{571, luisa::float3{0.778543200000, 0.9454504000000, 0.002017733000}},
    std::pair{572, luisa::float3{0.794825600000, 0.9384992000000, 0.001948200000}},
    std::pair{573, luisa::float3{0.810926400000, 0.9311628000000, 0.001889800000}},
    std::pair{574, luisa::float3{0.826824800000, 0.9234576000000, 0.001840933000}},
    std::pair{575, luisa::float3{0.842500000000, 0.9154000000000, 0.001800000000}},
    std::pair{576, luisa::float3{0.857932500000, 0.9070064000000, 0.001766267000}},
    std::pair{577, luisa::float3{0.873081600000, 0.8982772000000, 0.001737800000}},
    std::pair{578, luisa::float3{0.887894400000, 0.8892048000000, 0.001711200000}},
    std::pair{579, luisa::float3{0.902318100000, 0.8797816000000, 0.001683067000}},
    std::pair{580, luisa::float3{0.916300000000, 0.8700000000000, 0.001650001000}},
    std::pair{581, luisa::float3{0.929799500000, 0.8598613000000, 0.001610133000}},
    std::pair{582, luisa::float3{0.942798400000, 0.8493920000000, 0.001564400000}},
    std::pair{583, luisa::float3{0.955277600000, 0.8386220000000, 0.001513600000}},
    std::pair{584, luisa::float3{0.967217900000, 0.8275813000000, 0.001458533000}},
    std::pair{585, luisa::float3{0.978600000000, 0.8163000000000, 0.001400000000}},
    std::pair{586, luisa::float3{0.989385600000, 0.8047947000000, 0.001336667000}},
    std::pair{587, luisa::float3{0.999548800000, 0.7930820000000, 0.001270000000}},
    std::pair{588, luisa::float3{1.009089200000, 0.7811920000000, 0.001205000000}},
    std::pair{589, luisa::float3{1.018006400000, 0.7691547000000, 0.001146667000}},
    std::pair{590, luisa::float3{1.026300000000, 0.7570000000000, 0.001100000000}},
    std::pair{591, luisa::float3{1.033982700000, 0.7447541000000, 0.001068800000}},
    std::pair{592, luisa::float3{1.040986000000, 0.7324224000000, 0.001049400000}},
    std::pair{593, luisa::float3{1.047188000000, 0.7200036000000, 0.001035600000}},
    std::pair{594, luisa::float3{1.052466700000, 0.7074965000000, 0.001021200000}},
    std::pair{595, luisa::float3{1.056700000000, 0.6949000000000, 0.001000000000}},
    std::pair{596, luisa::float3{1.059794400000, 0.6822192000000, 0.000968640000}},
    std::pair{597, luisa::float3{1.061799200000, 0.6694716000000, 0.000929920000}},
    std::pair{598, luisa::float3{1.062806800000, 0.6566744000000, 0.000886880000}},
    std::pair{599, luisa::float3{1.062909600000, 0.6438448000000, 0.000842560000}},
    std::pair{600, luisa::float3{1.062200000000, 0.6310000000000, 0.000800000000}},
    std::pair{601, luisa::float3{1.060735200000, 0.6181555000000, 0.000760960000}},
    std::pair{602, luisa::float3{1.058443600000, 0.6053144000000, 0.000723680000}},
    std::pair{603, luisa::float3{1.055224400000, 0.5924756000000, 0.000685920000}},
    std::pair{604, luisa::float3{1.050976800000, 0.5796379000000, 0.000645440000}},
    std::pair{605, luisa::float3{1.045600000000, 0.5668000000000, 0.000600000000}},
    std::pair{606, luisa::float3{1.039036900000, 0.5539611000000, 0.000547866700}},
    std::pair{607, luisa::float3{1.031360800000, 0.5411372000000, 0.000491600000}},
    std::pair{608, luisa::float3{1.022666200000, 0.5283528000000, 0.000435400000}},
    std::pair{609, luisa::float3{1.013047700000, 0.5156323000000, 0.000383466700}},
    std::pair{610, luisa::float3{1.002600000000, 0.5030000000000, 0.000340000000}},
    std::pair{611, luisa::float3{0.991367500000, 0.4904688000000, 0.000307253300}},
    std::pair{612, luisa::float3{0.979331400000, 0.4780304000000, 0.000283160000}},
    std::pair{613, luisa::float3{0.966491600000, 0.4656776000000, 0.000265440000}},
    std::pair{614, luisa::float3{0.952847900000, 0.4534032000000, 0.000251813300}},
    std::pair{615, luisa::float3{0.938400000000, 0.4412000000000, 0.000240000000}},
    std::pair{616, luisa::float3{0.923194000000, 0.4290800000000, 0.000229546700}},
    std::pair{617, luisa::float3{0.907244000000, 0.4170360000000, 0.000220640000}},
    std::pair{618, luisa::float3{0.890502000000, 0.4050320000000, 0.000211960000}},
    std::pair{619, luisa::float3{0.872920000000, 0.3930320000000, 0.000202186700}},
    std::pair{620, luisa::float3{0.854449900000, 0.3810000000000, 0.000190000000}},
    std::pair{621, luisa::float3{0.835084000000, 0.3689184000000, 0.000174213300}},
    std::pair{622, luisa::float3{0.814946000000, 0.3568272000000, 0.000155640000}},
    std::pair{623, luisa::float3{0.794186000000, 0.3447768000000, 0.000135960000}},
    std::pair{624, luisa::float3{0.772954000000, 0.3328176000000, 0.000116853300}},
    std::pair{625, luisa::float3{0.751400000000, 0.3210000000000, 0.000100000000}},
    std::pair{626, luisa::float3{0.729583600000, 0.3093381000000, 0.000086133330}},
    std::pair{627, luisa::float3{0.707588800000, 0.2978504000000, 0.000074600000}},
    std::pair{628, luisa::float3{0.685602200000, 0.2865936000000, 0.000065000000}},
    std::pair{629, luisa::float3{0.663810400000, 0.2756245000000, 0.000056933330}},
    std::pair{630, luisa::float3{0.642400000000, 0.2650000000000, 0.000049999990}},
    std::pair{631, luisa::float3{0.621514900000, 0.2547632000000, 0.000044160000}},
    std::pair{632, luisa::float3{0.601113800000, 0.2448896000000, 0.000039480000}},
    std::pair{633, luisa::float3{0.581105200000, 0.2353344000000, 0.000035720000}},
    std::pair{634, luisa::float3{0.561397700000, 0.2260528000000, 0.000032640000}},
    std::pair{635, luisa::float3{0.541900000000, 0.2170000000000, 0.000030000000}},
    std::pair{636, luisa::float3{0.522599500000, 0.2081616000000, 0.000027653330}},
    std::pair{637, luisa::float3{0.503546400000, 0.1995488000000, 0.000025560000}},
    std::pair{638, luisa::float3{0.484743600000, 0.1911552000000, 0.000023640000}},
    std::pair{639, luisa::float3{0.466193900000, 0.1829744000000, 0.000021813330}},
    std::pair{640, luisa::float3{0.447900000000, 0.1750000000000, 0.000020000000}},
    std::pair{641, luisa::float3{0.429861300000, 0.1672235000000, 0.000018133330}},
    std::pair{642, luisa::float3{0.412098000000, 0.1596464000000, 0.000016200000}},
    std::pair{643, luisa::float3{0.394644000000, 0.1522776000000, 0.000014200000}},
    std::pair{644, luisa::float3{0.377533300000, 0.1451259000000, 0.000012133330}},
    std::pair{645, luisa::float3{0.360800000000, 0.1382000000000, 0.000010000000}},
    std::pair{646, luisa::float3{0.344456300000, 0.1315003000000, 0.000007733333}},
    std::pair{647, luisa::float3{0.328516800000, 0.1250248000000, 0.000005400000}},
    std::pair{648, luisa::float3{0.313019200000, 0.1187792000000, 0.000003200000}},
    std::pair{649, luisa::float3{0.298001100000, 0.1127691000000, 0.000001333333}},
    std::pair{650, luisa::float3{0.283500000000, 0.1070000000000, 0.000000000000}},
    std::pair{651, luisa::float3{0.269544800000, 0.1014762000000, 0.000000000000}},
    std::pair{652, luisa::float3{0.256118400000, 0.0961886400000, 0.000000000000}},
    std::pair{653, luisa::float3{0.243189600000, 0.0911229600000, 0.000000000000}},
    std::pair{654, luisa::float3{0.230727200000, 0.0862648500000, 0.000000000000}},
    std::pair{655, luisa::float3{0.218700000000, 0.0816000000000, 0.000000000000}},
    std::pair{656, luisa::float3{0.207097100000, 0.0771206400000, 0.000000000000}},
    std::pair{657, luisa::float3{0.195923200000, 0.0728255200000, 0.000000000000}},
    std::pair{658, luisa::float3{0.185170800000, 0.0687100800000, 0.000000000000}},
    std::pair{659, luisa::float3{0.174832300000, 0.0647697600000, 0.000000000000}},
    std::pair{660, luisa::float3{0.164900000000, 0.0610000000000, 0.000000000000}},
    std::pair{661, luisa::float3{0.155366700000, 0.0573962100000, 0.000000000000}},
    std::pair{662, luisa::float3{0.146230000000, 0.0539550400000, 0.000000000000}},
    std::pair{663, luisa::float3{0.137490000000, 0.0506737600000, 0.000000000000}},
    std::pair{664, luisa::float3{0.129146700000, 0.0475496500000, 0.000000000000}},
    std::pair{665, luisa::float3{0.121200000000, 0.0445800000000, 0.000000000000}},
    std::pair{666, luisa::float3{0.113639700000, 0.0417587200000, 0.000000000000}},
    std::pair{667, luisa::float3{0.106465000000, 0.0390849600000, 0.000000000000}},
    std::pair{668, luisa::float3{0.099690440000, 0.0365638400000, 0.000000000000}},
    std::pair{669, luisa::float3{0.093330610000, 0.0342004800000, 0.000000000000}},
    std::pair{670, luisa::float3{0.087400000000, 0.0320000000000, 0.000000000000}},
    std::pair{671, luisa::float3{0.081900960000, 0.0299626100000, 0.000000000000}},
    std::pair{672, luisa::float3{0.076804280000, 0.0280766400000, 0.000000000000}},
    std::pair{673, luisa::float3{0.072077120000, 0.0263293600000, 0.000000000000}},
    std::pair{674, luisa::float3{0.067686640000, 0.0247080500000, 0.000000000000}},
    std::pair{675, luisa::float3{0.063600000000, 0.0232000000000, 0.000000000000}},
    std::pair{676, luisa::float3{0.059806850000, 0.0218007700000, 0.000000000000}},
    std::pair{677, luisa::float3{0.056282160000, 0.0205011200000, 0.000000000000}},
    std::pair{678, luisa::float3{0.052971040000, 0.0192810800000, 0.000000000000}},
    std::pair{679, luisa::float3{0.049818610000, 0.0181206900000, 0.000000000000}},
    std::pair{680, luisa::float3{0.046770000000, 0.0170000000000, 0.000000000000}},
    std::pair{681, luisa::float3{0.043784050000, 0.0159037900000, 0.000000000000}},
    std::pair{682, luisa::float3{0.040875360000, 0.0148371800000, 0.000000000000}},
    std::pair{683, luisa::float3{0.038072640000, 0.0138106800000, 0.000000000000}},
    std::pair{684, luisa::float3{0.035404610000, 0.0128347800000, 0.000000000000}},
    std::pair{685, luisa::float3{0.032900000000, 0.0119200000000, 0.000000000000}},
    std::pair{686, luisa::float3{0.030564190000, 0.0110683100000, 0.000000000000}},
    std::pair{687, luisa::float3{0.028380560000, 0.0102733900000, 0.000000000000}},
    std::pair{688, luisa::float3{0.026344840000, 0.0095333110000, 0.000000000000}},
    std::pair{689, luisa::float3{0.024452750000, 0.0088461570000, 0.000000000000}},
    std::pair{690, luisa::float3{0.022700000000, 0.0082100000000, 0.000000000000}},
    std::pair{691, luisa::float3{0.021084290000, 0.0076237810000, 0.000000000000}},
    std::pair{692, luisa::float3{0.019599880000, 0.0070854240000, 0.000000000000}},
    std::pair{693, luisa::float3{0.018237320000, 0.0065914760000, 0.000000000000}},
    std::pair{694, luisa::float3{0.016987170000, 0.0061384850000, 0.000000000000}},
    std::pair{695, luisa::float3{0.015840000000, 0.0057230000000, 0.000000000000}},
    std::pair{696, luisa::float3{0.014790640000, 0.0053430590000, 0.000000000000}},
    std::pair{697, luisa::float3{0.013831320000, 0.0049957960000, 0.000000000000}},
    std::pair{698, luisa::float3{0.012948680000, 0.0046764040000, 0.000000000000}},
    std::pair{699, luisa::float3{0.012129200000, 0.0043800750000, 0.000000000000}},
    std::pair{700, luisa::float3{0.011359160000, 0.0041020000000, 0.000000000000}},
    std::pair{701, luisa::float3{0.010629350000, 0.0038384530000, 0.000000000000}},
    std::pair{702, luisa::float3{0.009938846000, 0.0035890990000, 0.000000000000}},
    std::pair{703, luisa::float3{0.009288422000, 0.0033542190000, 0.000000000000}},
    std::pair{704, luisa::float3{0.008678854000, 0.0031340930000, 0.000000000000}},
    std::pair{705, luisa::float3{0.008110916000, 0.0029290000000, 0.000000000000}},
    std::pair{706, luisa::float3{0.007582388000, 0.0027381390000, 0.000000000000}},
    std::pair{707, luisa::float3{0.007088746000, 0.0025598760000, 0.000000000000}},
    std::pair{708, luisa::float3{0.006627313000, 0.0023932440000, 0.000000000000}},
    std::pair{709, luisa::float3{0.006195408000, 0.0022372750000, 0.000000000000}},
    std::pair{710, luisa::float3{0.005790346000, 0.0020910000000, 0.000000000000}},
    std::pair{711, luisa::float3{0.005409826000, 0.0019535870000, 0.000000000000}},
    std::pair{712, luisa::float3{0.005052583000, 0.0018245800000, 0.000000000000}},
    std::pair{713, luisa::float3{0.004717512000, 0.0017035800000, 0.000000000000}},
    std::pair{714, luisa::float3{0.004403507000, 0.0015901870000, 0.000000000000}},
    std::pair{715, luisa::float3{0.004109457000, 0.0014840000000, 0.000000000000}},
    std::pair{716, luisa::float3{0.003833913000, 0.0013844960000, 0.000000000000}},
    std::pair{717, luisa::float3{0.003575748000, 0.0012912680000, 0.000000000000}},
    std::pair{718, luisa::float3{0.003334342000, 0.0012040920000, 0.000000000000}},
    std::pair{719, luisa::float3{0.003109075000, 0.0011227440000, 0.000000000000}},
    std::pair{720, luisa::float3{0.002899327000, 0.0010470000000, 0.000000000000}},
    std::pair{721, luisa::float3{0.002704348000, 0.0009765896000, 0.000000000000}},
    std::pair{722, luisa::float3{0.002523020000, 0.0009111088000, 0.000000000000}},
    std::pair{723, luisa::float3{0.002354168000, 0.0008501332000, 0.000000000000}},
    std::pair{724, luisa::float3{0.002196616000, 0.0007932384000, 0.000000000000}},
    std::pair{725, luisa::float3{0.002049190000, 0.0007400000000, 0.000000000000}},
    std::pair{726, luisa::float3{0.001910960000, 0.0006900827000, 0.000000000000}},
    std::pair{727, luisa::float3{0.001781438000, 0.0006433100000, 0.000000000000}},
    std::pair{728, luisa::float3{0.001660110000, 0.0005994960000, 0.000000000000}},
    std::pair{729, luisa::float3{0.001546459000, 0.0005584547000, 0.000000000000}},
    std::pair{730, luisa::float3{0.001439971000, 0.0005200000000, 0.000000000000}},
    std::pair{731, luisa::float3{0.001340042000, 0.0004839136000, 0.000000000000}},
    std::pair{732, luisa::float3{0.001246275000, 0.0004500528000, 0.000000000000}},
    std::pair{733, luisa::float3{0.001158471000, 0.0004183452000, 0.000000000000}},
    std::pair{734, luisa::float3{0.001076430000, 0.0003887184000, 0.000000000000}},
    std::pair{735, luisa::float3{0.000999949300, 0.0003611000000, 0.000000000000}},
    std::pair{736, luisa::float3{0.000928735800, 0.0003353835000, 0.000000000000}},
    std::pair{737, luisa::float3{0.000862433200, 0.0003114404000, 0.000000000000}},
    std::pair{738, luisa::float3{0.000800750300, 0.0002891656000, 0.000000000000}},
    std::pair{739, luisa::float3{0.000743396000, 0.0002684539000, 0.000000000000}},
    std::pair{740, luisa::float3{0.000690078600, 0.0002492000000, 0.000000000000}},
    std::pair{741, luisa::float3{0.000640515600, 0.0002313019000, 0.000000000000}},
    std::pair{742, luisa::float3{0.000594502100, 0.0002146856000, 0.000000000000}},
    std::pair{743, luisa::float3{0.000551864600, 0.0001992884000, 0.000000000000}},
    std::pair{744, luisa::float3{0.000512429000, 0.0001850475000, 0.000000000000}},
    std::pair{745, luisa::float3{0.000476021300, 0.0001719000000, 0.000000000000}},
    std::pair{746, luisa::float3{0.000442453600, 0.0001597781000, 0.000000000000}},
    std::pair{747, luisa::float3{0.000411511700, 0.0001486044000, 0.000000000000}},
    std::pair{748, luisa::float3{0.000382981400, 0.0001383016000, 0.000000000000}},
    std::pair{749, luisa::float3{0.000356649100, 0.0001287925000, 0.000000000000}},
    std::pair{750, luisa::float3{0.000332301100, 0.0001200000000, 0.000000000000}},
    std::pair{751, luisa::float3{0.000309758600, 0.0001118595000, 0.000000000000}},
    std::pair{752, luisa::float3{0.000288887100, 0.0001043224000, 0.000000000000}},
    std::pair{753, luisa::float3{0.000269539400, 0.0000973356000, 0.000000000000}},
    std::pair{754, luisa::float3{0.000251568200, 0.0000908458700, 0.000000000000}},
    std::pair{755, luisa::float3{0.000234826100, 0.0000848000000, 0.000000000000}},
    std::pair{756, luisa::float3{0.000219171000, 0.0000791466700, 0.000000000000}},
    std::pair{757, luisa::float3{0.000204525800, 0.0000738580000, 0.000000000000}},
    std::pair{758, luisa::float3{0.000190840500, 0.0000689160000, 0.000000000000}},
    std::pair{759, luisa::float3{0.000178065400, 0.0000643026700, 0.000000000000}},
    std::pair{760, luisa::float3{0.000166150500, 0.0000600000000, 0.000000000000}},
    std::pair{761, luisa::float3{0.000155023600, 0.0000559818700, 0.000000000000}},
    std::pair{762, luisa::float3{0.000144621900, 0.0000522256000, 0.000000000000}},
    std::pair{763, luisa::float3{0.000134909800, 0.0000487184000, 0.000000000000}},
    std::pair{764, luisa::float3{0.000125852000, 0.0000454474700, 0.000000000000}},
    std::pair{765, luisa::float3{0.000117413000, 0.0000424000000, 0.000000000000}},
    std::pair{766, luisa::float3{0.000109551500, 0.0000395610400, 0.000000000000}},
    std::pair{767, luisa::float3{0.000102224500, 0.0000369151200, 0.000000000000}},
    std::pair{768, luisa::float3{0.000095394450, 0.0000344486800, 0.000000000000}},
    std::pair{769, luisa::float3{0.000089023900, 0.0000321481600, 0.000000000000}},
    std::pair{770, luisa::float3{0.000083075270, 0.0000300000000, 0.000000000000}},
    std::pair{771, luisa::float3{0.000077512690, 0.0000279912500, 0.000000000000}},
    std::pair{772, luisa::float3{0.000072313040, 0.0000261135600, 0.000000000000}},
    std::pair{773, luisa::float3{0.000067457780, 0.0000243602400, 0.000000000000}},
    std::pair{774, luisa::float3{0.000062928440, 0.0000227246100, 0.000000000000}},
    std::pair{775, luisa::float3{0.000058706520, 0.0000212000000, 0.000000000000}},
    std::pair{776, luisa::float3{0.000054770280, 0.0000197785500, 0.000000000000}},
    std::pair{777, luisa::float3{0.000051099180, 0.0000184528500, 0.000000000000}},
    std::pair{778, luisa::float3{0.000047676540, 0.0000172168700, 0.000000000000}},
    std::pair{779, luisa::float3{0.000044485670, 0.0000160645900, 0.000000000000}},
    std::pair{780, luisa::float3{0.000041509940, 0.0000149900000, 0.000000000000}},
    std::pair{781, luisa::float3{0.000038733240, 0.0000139872800, 0.000000000000}},
    std::pair{782, luisa::float3{0.000036142030, 0.0000130515500, 0.000000000000}},
    std::pair{783, luisa::float3{0.000033723520, 0.0000121781800, 0.000000000000}},
    std::pair{784, luisa::float3{0.000031464870, 0.0000113625400, 0.000000000000}},
    std::pair{785, luisa::float3{0.000029353260, 0.0000106000000, 0.000000000000}},
    std::pair{786, luisa::float3{0.000027375730, 0.0000098858770, 0.000000000000}},
    std::pair{787, luisa::float3{0.000025524330, 0.0000092173040, 0.000000000000}},
    std::pair{788, luisa::float3{0.000023793760, 0.0000085923620, 0.000000000000}},
    std::pair{789, luisa::float3{0.000022178700, 0.0000080091330, 0.000000000000}},
    std::pair{790, luisa::float3{0.000020673830, 0.0000074657000, 0.000000000000}},
    std::pair{791, luisa::float3{0.000019272260, 0.0000069595670, 0.000000000000}},
    std::pair{792, luisa::float3{0.000017966400, 0.0000064879950, 0.000000000000}},
    std::pair{793, luisa::float3{0.000016749910, 0.0000060486990, 0.000000000000}},
    std::pair{794, luisa::float3{0.000015616480, 0.0000056393960, 0.000000000000}},
    std::pair{795, luisa::float3{0.000014559770, 0.0000052578000, 0.000000000000}},
    std::pair{796, luisa::float3{0.000013573870, 0.0000049017710, 0.000000000000}},
    std::pair{797, luisa::float3{0.000012654360, 0.0000045697200, 0.000000000000}},
    std::pair{798, luisa::float3{0.000011797230, 0.0000042601940, 0.000000000000}},
    std::pair{799, luisa::float3{0.000010998440, 0.0000039717390, 0.000000000000}},
    std::pair{800, luisa::float3{0.000010253980, 0.0000037029000, 0.000000000000}},
    std::pair{801, luisa::float3{0.000009559646, 0.0000034521630, 0.000000000000}},
    std::pair{802, luisa::float3{0.000008912044, 0.0000032183020, 0.000000000000}},
    std::pair{803, luisa::float3{0.000008308358, 0.0000030003000, 0.000000000000}},
    std::pair{804, luisa::float3{0.000007745769, 0.0000027971390, 0.000000000000}},
    std::pair{805, luisa::float3{0.000007221456, 0.0000026078000, 0.000000000000}},
    std::pair{806, luisa::float3{0.000006732475, 0.0000024312200, 0.000000000000}},
    std::pair{807, luisa::float3{0.000006276423, 0.0000022665310, 0.000000000000}},
    std::pair{808, luisa::float3{0.000005851304, 0.0000021130130, 0.000000000000}},
    std::pair{809, luisa::float3{0.000005455118, 0.0000019699430, 0.000000000000}},
    std::pair{810, luisa::float3{0.000005085868, 0.0000018366000, 0.000000000000}},
    std::pair{811, luisa::float3{0.000004741466, 0.0000017122300, 0.000000000000}},
    std::pair{812, luisa::float3{0.000004420236, 0.0000015962280, 0.000000000000}},
    std::pair{813, luisa::float3{0.000004120783, 0.0000014880900, 0.000000000000}},
    std::pair{814, luisa::float3{0.000003841716, 0.0000013873140, 0.000000000000}},
    std::pair{815, luisa::float3{0.000003581652, 0.0000012934000, 0.000000000000}},
    std::pair{816, luisa::float3{0.000003339127, 0.0000012058200, 0.000000000000}},
    std::pair{817, luisa::float3{0.000003112949, 0.0000011241430, 0.000000000000}},
    std::pair{818, luisa::float3{0.000002902121, 0.0000010480090, 0.000000000000}},
    std::pair{819, luisa::float3{0.000002705645, 0.0000009770578, 0.000000000000}},
    std::pair{820, luisa::float3{0.000002522525, 0.0000009109300, 0.000000000000}},
    std::pair{821, luisa::float3{0.000002351726, 0.0000008492513, 0.000000000000}},
    std::pair{822, luisa::float3{0.000002192415, 0.0000007917212, 0.000000000000}},
    std::pair{823, luisa::float3{0.000002043902, 0.0000007380904, 0.000000000000}},
    std::pair{824, luisa::float3{0.000001905497, 0.0000006881098, 0.000000000000}},
    std::pair{825, luisa::float3{0.000001776509, 0.0000006415300, 0.000000000000}},
    std::pair{826, luisa::float3{0.000001656215, 0.0000005980895, 0.000000000000}},
    std::pair{827, luisa::float3{0.000001544022, 0.0000005575746, 0.000000000000}},
    std::pair{828, luisa::float3{0.000001439440, 0.0000005198080, 0.000000000000}},
    std::pair{829, luisa::float3{0.000001341977, 0.0000004846123, 0.000000000000}},
    std::pair{830, luisa::float3{0.000001251141, 0.0000004518100, 0.000000000000}},
};
std::pair<int, float> CIE_std_illum_D65[]{
    std::pair{300, float{0.0341}},
    std::pair{301, float{0.36014}},
    std::pair{302, float{0.68618}},
    std::pair{303, float{1.01222}},
    std::pair{304, float{1.33826}},
    std::pair{305, float{1.6643}},
    std::pair{306, float{1.99034}},
    std::pair{307, float{2.31638}},
    std::pair{308, float{2.64242}},
    std::pair{309, float{2.96846}},
    std::pair{310, float{3.2945}},
    std::pair{311, float{4.98865}},
    std::pair{312, float{6.6828}},
    std::pair{313, float{8.37695}},
    std::pair{314, float{10.0711}},
    std::pair{315, float{11.7652}},
    std::pair{316, float{13.4594}},
    std::pair{317, float{15.1535}},
    std::pair{318, float{16.8477}},
    std::pair{319, float{18.5418}},
    std::pair{320, float{20.236}},
    std::pair{321, float{21.9177}},
    std::pair{322, float{23.5995}},
    std::pair{323, float{25.2812}},
    std::pair{324, float{26.963}},
    std::pair{325, float{28.6447}},
    std::pair{326, float{30.3265}},
    std::pair{327, float{32.0082}},
    std::pair{328, float{33.69}},
    std::pair{329, float{35.3717}},
    std::pair{330, float{37.0535}},
    std::pair{331, float{37.343}},
    std::pair{332, float{37.6326}},
    std::pair{333, float{37.9221}},
    std::pair{334, float{38.2116}},
    std::pair{335, float{38.5011}},
    std::pair{336, float{38.7907}},
    std::pair{337, float{39.0802}},
    std::pair{338, float{39.3697}},
    std::pair{339, float{39.6593}},
    std::pair{340, float{39.9488}},
    std::pair{341, float{40.4451}},
    std::pair{342, float{40.9414}},
    std::pair{343, float{41.4377}},
    std::pair{344, float{41.934}},
    std::pair{345, float{42.4302}},
    std::pair{346, float{42.9265}},
    std::pair{347, float{43.4228}},
    std::pair{348, float{43.9191}},
    std::pair{349, float{44.4154}},
    std::pair{350, float{44.9117}},
    std::pair{351, float{45.0844}},
    std::pair{352, float{45.257}},
    std::pair{353, float{45.4297}},
    std::pair{354, float{45.6023}},
    std::pair{355, float{45.775}},
    std::pair{356, float{45.9477}},
    std::pair{357, float{46.1203}},
    std::pair{358, float{46.293}},
    std::pair{359, float{46.4656}},
    std::pair{360, float{46.6383}},
    std::pair{361, float{47.1834}},
    std::pair{362, float{47.7285}},
    std::pair{363, float{48.2735}},
    std::pair{364, float{48.8186}},
    std::pair{365, float{49.3637}},
    std::pair{366, float{49.9088}},
    std::pair{367, float{50.4539}},
    std::pair{368, float{50.9989}},
    std::pair{369, float{51.544}},
    std::pair{370, float{52.0891}},
    std::pair{371, float{51.8777}},
    std::pair{372, float{51.6664}},
    std::pair{373, float{51.455}},
    std::pair{374, float{51.2437}},
    std::pair{375, float{51.0323}},
    std::pair{376, float{50.8209}},
    std::pair{377, float{50.6096}},
    std::pair{378, float{50.3982}},
    std::pair{379, float{50.1869}},
    std::pair{380, float{49.9755}},
    std::pair{381, float{50.4428}},
    std::pair{382, float{50.91}},
    std::pair{383, float{51.3773}},
    std::pair{384, float{51.8446}},
    std::pair{385, float{52.3118}},
    std::pair{386, float{52.7791}},
    std::pair{387, float{53.2464}},
    std::pair{388, float{53.7137}},
    std::pair{389, float{54.1809}},
    std::pair{390, float{54.6482}},
    std::pair{391, float{57.4589}},
    std::pair{392, float{60.2695}},
    std::pair{393, float{63.0802}},
    std::pair{394, float{65.8909}},
    std::pair{395, float{68.7015}},
    std::pair{396, float{71.5122}},
    std::pair{397, float{74.3229}},
    std::pair{398, float{77.1336}},
    std::pair{399, float{79.9442}},
    std::pair{400, float{82.7549}},
    std::pair{401, float{83.628}},
    std::pair{402, float{84.5011}},
    std::pair{403, float{85.3742}},
    std::pair{404, float{86.2473}},
    std::pair{405, float{87.1204}},
    std::pair{406, float{87.9936}},
    std::pair{407, float{88.8667}},
    std::pair{408, float{89.7398}},
    std::pair{409, float{90.6129}},
    std::pair{410, float{91.486}},
    std::pair{411, float{91.6806}},
    std::pair{412, float{91.8752}},
    std::pair{413, float{92.0697}},
    std::pair{414, float{92.2643}},
    std::pair{415, float{92.4589}},
    std::pair{416, float{92.6535}},
    std::pair{417, float{92.8481}},
    std::pair{418, float{93.0426}},
    std::pair{419, float{93.2372}},
    std::pair{420, float{93.4318}},
    std::pair{421, float{92.7568}},
    std::pair{422, float{92.0819}},
    std::pair{423, float{91.4069}},
    std::pair{424, float{90.732}},
    std::pair{425, float{90.057}},
    std::pair{426, float{89.3821}},
    std::pair{427, float{88.7071}},
    std::pair{428, float{88.0322}},
    std::pair{429, float{87.3572}},
    std::pair{430, float{86.6823}},
    std::pair{431, float{88.5006}},
    std::pair{432, float{90.3188}},
    std::pair{433, float{92.1371}},
    std::pair{434, float{93.9554}},
    std::pair{435, float{95.7736}},
    std::pair{436, float{97.5919}},
    std::pair{437, float{99.4102}},
    std::pair{438, float{101.228}},
    std::pair{439, float{103.047}},
    std::pair{440, float{104.865}},
    std::pair{441, float{106.079}},
    std::pair{442, float{107.294}},
    std::pair{443, float{108.508}},
    std::pair{444, float{109.722}},
    std::pair{445, float{110.936}},
    std::pair{446, float{112.151}},
    std::pair{447, float{113.365}},
    std::pair{448, float{114.579}},
    std::pair{449, float{115.794}},
    std::pair{450, float{117.008}},
    std::pair{451, float{117.088}},
    std::pair{452, float{117.169}},
    std::pair{453, float{117.249}},
    std::pair{454, float{117.33}},
    std::pair{455, float{117.41}},
    std::pair{456, float{117.49}},
    std::pair{457, float{117.571}},
    std::pair{458, float{117.651}},
    std::pair{459, float{117.732}},
    std::pair{460, float{117.812}},
    std::pair{461, float{117.517}},
    std::pair{462, float{117.222}},
    std::pair{463, float{116.927}},
    std::pair{464, float{116.632}},
    std::pair{465, float{116.336}},
    std::pair{466, float{116.041}},
    std::pair{467, float{115.746}},
    std::pair{468, float{115.451}},
    std::pair{469, float{115.156}},
    std::pair{470, float{114.861}},
    std::pair{471, float{114.967}},
    std::pair{472, float{115.073}},
    std::pair{473, float{115.18}},
    std::pair{474, float{115.286}},
    std::pair{475, float{115.392}},
    std::pair{476, float{115.498}},
    std::pair{477, float{115.604}},
    std::pair{478, float{115.711}},
    std::pair{479, float{115.817}},
    std::pair{480, float{115.923}},
    std::pair{481, float{115.212}},
    std::pair{482, float{114.501}},
    std::pair{483, float{113.789}},
    std::pair{484, float{113.078}},
    std::pair{485, float{112.367}},
    std::pair{486, float{111.656}},
    std::pair{487, float{110.945}},
    std::pair{488, float{110.233}},
    std::pair{489, float{109.522}},
    std::pair{490, float{108.811}},
    std::pair{491, float{108.865}},
    std::pair{492, float{108.92}},
    std::pair{493, float{108.974}},
    std::pair{494, float{109.028}},
    std::pair{495, float{109.082}},
    std::pair{496, float{109.137}},
    std::pair{497, float{109.191}},
    std::pair{498, float{109.245}},
    std::pair{499, float{109.3}},
    std::pair{500, float{109.354}},
    std::pair{501, float{109.199}},
    std::pair{502, float{109.044}},
    std::pair{503, float{108.888}},
    std::pair{504, float{108.733}},
    std::pair{505, float{108.578}},
    std::pair{506, float{108.423}},
    std::pair{507, float{108.268}},
    std::pair{508, float{108.112}},
    std::pair{509, float{107.957}},
    std::pair{510, float{107.802}},
    std::pair{511, float{107.501}},
    std::pair{512, float{107.2}},
    std::pair{513, float{106.898}},
    std::pair{514, float{106.597}},
    std::pair{515, float{106.296}},
    std::pair{516, float{105.995}},
    std::pair{517, float{105.694}},
    std::pair{518, float{105.392}},
    std::pair{519, float{105.091}},
    std::pair{520, float{104.79}},
    std::pair{521, float{105.08}},
    std::pair{522, float{105.37}},
    std::pair{523, float{105.66}},
    std::pair{524, float{105.95}},
    std::pair{525, float{106.239}},
    std::pair{526, float{106.529}},
    std::pair{527, float{106.819}},
    std::pair{528, float{107.109}},
    std::pair{529, float{107.399}},
    std::pair{530, float{107.689}},
    std::pair{531, float{107.361}},
    std::pair{532, float{107.032}},
    std::pair{533, float{106.704}},
    std::pair{534, float{106.375}},
    std::pair{535, float{106.047}},
    std::pair{536, float{105.719}},
    std::pair{537, float{105.39}},
    std::pair{538, float{105.062}},
    std::pair{539, float{104.733}},
    std::pair{540, float{104.405}},
    std::pair{541, float{104.369}},
    std::pair{542, float{104.333}},
    std::pair{543, float{104.297}},
    std::pair{544, float{104.261}},
    std::pair{545, float{104.225}},
    std::pair{546, float{104.19}},
    std::pair{547, float{104.154}},
    std::pair{548, float{104.118}},
    std::pair{549, float{104.082}},
    std::pair{550, float{104.046}},
    std::pair{551, float{103.641}},
    std::pair{552, float{103.237}},
    std::pair{553, float{102.832}},
    std::pair{554, float{102.428}},
    std::pair{555, float{102.023}},
    std::pair{556, float{101.618}},
    std::pair{557, float{101.214}},
    std::pair{558, float{100.809}},
    std::pair{559, float{100.405}},
    std::pair{560, float{100}},
    std::pair{561, float{99.6334}},
    std::pair{562, float{99.2668}},
    std::pair{563, float{98.9003}},
    std::pair{564, float{98.5337}},
    std::pair{565, float{98.1671}},
    std::pair{566, float{97.8005}},
    std::pair{567, float{97.4339}},
    std::pair{568, float{97.0674}},
    std::pair{569, float{96.7008}},
    std::pair{570, float{96.3342}},
    std::pair{571, float{96.2796}},
    std::pair{572, float{96.225}},
    std::pair{573, float{96.1703}},
    std::pair{574, float{96.1157}},
    std::pair{575, float{96.0611}},
    std::pair{576, float{96.0065}},
    std::pair{577, float{95.9519}},
    std::pair{578, float{95.8972}},
    std::pair{579, float{95.8426}},
    std::pair{580, float{95.788}},
    std::pair{581, float{95.0778}},
    std::pair{582, float{94.3675}},
    std::pair{583, float{93.6573}},
    std::pair{584, float{92.947}},
    std::pair{585, float{92.2368}},
    std::pair{586, float{91.5266}},
    std::pair{587, float{90.8163}},
    std::pair{588, float{90.1061}},
    std::pair{589, float{89.3958}},
    std::pair{590, float{88.6856}},
    std::pair{591, float{88.8177}},
    std::pair{592, float{88.9497}},
    std::pair{593, float{89.0818}},
    std::pair{594, float{89.2138}},
    std::pair{595, float{89.3459}},
    std::pair{596, float{89.478}},
    std::pair{597, float{89.61}},
    std::pair{598, float{89.7421}},
    std::pair{599, float{89.8741}},
    std::pair{600, float{90.0062}},
    std::pair{601, float{89.9655}},
    std::pair{602, float{89.9248}},
    std::pair{603, float{89.8841}},
    std::pair{604, float{89.8434}},
    std::pair{605, float{89.8026}},
    std::pair{606, float{89.7619}},
    std::pair{607, float{89.7212}},
    std::pair{608, float{89.6805}},
    std::pair{609, float{89.6398}},
    std::pair{610, float{89.5991}},
    std::pair{611, float{89.4091}},
    std::pair{612, float{89.219}},
    std::pair{613, float{89.029}},
    std::pair{614, float{88.8389}},
    std::pair{615, float{88.6489}},
    std::pair{616, float{88.4589}},
    std::pair{617, float{88.2688}},
    std::pair{618, float{88.0788}},
    std::pair{619, float{87.8887}},
    std::pair{620, float{87.6987}},
    std::pair{621, float{87.2577}},
    std::pair{622, float{86.8167}},
    std::pair{623, float{86.3757}},
    std::pair{624, float{85.9347}},
    std::pair{625, float{85.4936}},
    std::pair{626, float{85.0526}},
    std::pair{627, float{84.6116}},
    std::pair{628, float{84.1706}},
    std::pair{629, float{83.7296}},
    std::pair{630, float{83.2886}},
    std::pair{631, float{83.3297}},
    std::pair{632, float{83.3707}},
    std::pair{633, float{83.4118}},
    std::pair{634, float{83.4528}},
    std::pair{635, float{83.4939}},
    std::pair{636, float{83.535}},
    std::pair{637, float{83.576}},
    std::pair{638, float{83.6171}},
    std::pair{639, float{83.6581}},
    std::pair{640, float{83.6992}},
    std::pair{641, float{83.332}},
    std::pair{642, float{82.9647}},
    std::pair{643, float{82.5975}},
    std::pair{644, float{82.2302}},
    std::pair{645, float{81.863}},
    std::pair{646, float{81.4958}},
    std::pair{647, float{81.1285}},
    std::pair{648, float{80.7613}},
    std::pair{649, float{80.394}},
    std::pair{650, float{80.0268}},
    std::pair{651, float{80.0456}},
    std::pair{652, float{80.0644}},
    std::pair{653, float{80.0831}},
    std::pair{654, float{80.1019}},
    std::pair{655, float{80.1207}},
    std::pair{656, float{80.1395}},
    std::pair{657, float{80.1583}},
    std::pair{658, float{80.177}},
    std::pair{659, float{80.1958}},
    std::pair{660, float{80.2146}},
    std::pair{661, float{80.4209}},
    std::pair{662, float{80.6272}},
    std::pair{663, float{80.8336}},
    std::pair{664, float{81.0399}},
    std::pair{665, float{81.2462}},
    std::pair{666, float{81.4525}},
    std::pair{667, float{81.6588}},
    std::pair{668, float{81.8652}},
    std::pair{669, float{82.0715}},
    std::pair{670, float{82.2778}},
    std::pair{671, float{81.8784}},
    std::pair{672, float{81.4791}},
    std::pair{673, float{81.0797}},
    std::pair{674, float{80.6804}},
    std::pair{675, float{80.281}},
    std::pair{676, float{79.8816}},
    std::pair{677, float{79.4823}},
    std::pair{678, float{79.0829}},
    std::pair{679, float{78.6836}},
    std::pair{680, float{78.2842}},
    std::pair{681, float{77.4279}},
    std::pair{682, float{76.5716}},
    std::pair{683, float{75.7153}},
    std::pair{684, float{74.859}},
    std::pair{685, float{74.0027}},
    std::pair{686, float{73.1465}},
    std::pair{687, float{72.2902}},
    std::pair{688, float{71.4339}},
    std::pair{689, float{70.5776}},
    std::pair{690, float{69.7213}},
    std::pair{691, float{69.9101}},
    std::pair{692, float{70.0989}},
    std::pair{693, float{70.2876}},
    std::pair{694, float{70.4764}},
    std::pair{695, float{70.6652}},
    std::pair{696, float{70.854}},
    std::pair{697, float{71.0428}},
    std::pair{698, float{71.2315}},
    std::pair{699, float{71.4203}},
    std::pair{700, float{71.6091}},
    std::pair{701, float{71.8831}},
    std::pair{702, float{72.1571}},
    std::pair{703, float{72.4311}},
    std::pair{704, float{72.7051}},
    std::pair{705, float{72.979}},
    std::pair{706, float{73.253}},
    std::pair{707, float{73.527}},
    std::pair{708, float{73.801}},
    std::pair{709, float{74.075}},
    std::pair{710, float{74.349}},
    std::pair{711, float{73.0745}},
    std::pair{712, float{71.8}},
    std::pair{713, float{70.5255}},
    std::pair{714, float{69.251}},
    std::pair{715, float{67.9765}},
    std::pair{716, float{66.702}},
    std::pair{717, float{65.4275}},
    std::pair{718, float{64.153}},
    std::pair{719, float{62.8785}},
    std::pair{720, float{61.604}},
    std::pair{721, float{62.4322}},
    std::pair{722, float{63.2603}},
    std::pair{723, float{64.0885}},
    std::pair{724, float{64.9166}},
    std::pair{725, float{65.7448}},
    std::pair{726, float{66.573}},
    std::pair{727, float{67.4011}},
    std::pair{728, float{68.2293}},
    std::pair{729, float{69.0574}},
    std::pair{730, float{69.8856}},
    std::pair{731, float{70.4057}},
    std::pair{732, float{70.9259}},
    std::pair{733, float{71.446}},
    std::pair{734, float{71.9662}},
    std::pair{735, float{72.4863}},
    std::pair{736, float{73.0064}},
    std::pair{737, float{73.5266}},
    std::pair{738, float{74.0467}},
    std::pair{739, float{74.5669}},
    std::pair{740, float{75.087}},
    std::pair{741, float{73.9376}},
    std::pair{742, float{72.7881}},
    std::pair{743, float{71.6387}},
    std::pair{744, float{70.4893}},
    std::pair{745, float{69.3398}},
    std::pair{746, float{68.1904}},
    std::pair{747, float{67.041}},
    std::pair{748, float{65.8916}},
    std::pair{749, float{64.7421}},
    std::pair{750, float{63.5927}},
    std::pair{751, float{61.8752}},
    std::pair{752, float{60.1578}},
    std::pair{753, float{58.4403}},
    std::pair{754, float{56.7229}},
    std::pair{755, float{55.0054}},
    std::pair{756, float{53.288}},
    std::pair{757, float{51.5705}},
    std::pair{758, float{49.8531}},
    std::pair{759, float{48.1356}},
    std::pair{760, float{46.4182}},
    std::pair{761, float{48.4569}},
    std::pair{762, float{50.4956}},
    std::pair{763, float{52.5344}},
    std::pair{764, float{54.5731}},
    std::pair{765, float{56.6118}},
    std::pair{766, float{58.6505}},
    std::pair{767, float{60.6892}},
    std::pair{768, float{62.728}},
    std::pair{769, float{64.7667}},
    std::pair{770, float{66.8054}},
    std::pair{771, float{66.4631}},
    std::pair{772, float{66.1209}},
    std::pair{773, float{65.7786}},
    std::pair{774, float{65.4364}},
    std::pair{775, float{65.0941}},
    std::pair{776, float{64.7518}},
    std::pair{777, float{64.4096}},
    std::pair{778, float{64.0673}},
    std::pair{779, float{63.7251}},
    std::pair{780, float{63.3828}},
    std::pair{781, float{63.4749}},
    std::pair{782, float{63.567}},
    std::pair{783, float{63.6592}},
    std::pair{784, float{63.7513}},
    std::pair{785, float{63.8434}},
    std::pair{786, float{63.9355}},
    std::pair{787, float{64.0276}},
    std::pair{788, float{64.1198}},
    std::pair{789, float{64.2119}},
    std::pair{790, float{64.304}},
    std::pair{791, float{63.8188}},
    std::pair{792, float{63.3336}},
    std::pair{793, float{62.8484}},
    std::pair{794, float{62.3632}},
    std::pair{795, float{61.8779}},
    std::pair{796, float{61.3927}},
    std::pair{797, float{60.9075}},
    std::pair{798, float{60.4223}},
    std::pair{799, float{59.9371}},
    std::pair{800, float{59.4519}},
    std::pair{801, float{58.7026}},
    std::pair{802, float{57.9533}},
    std::pair{803, float{57.204}},
    std::pair{804, float{56.4547}},
    std::pair{805, float{55.7054}},
    std::pair{806, float{54.9562}},
    std::pair{807, float{54.2069}},
    std::pair{808, float{53.4576}},
    std::pair{809, float{52.7083}},
    std::pair{810, float{51.959}},
    std::pair{811, float{52.5072}},
    std::pair{812, float{53.0553}},
    std::pair{813, float{53.6035}},
    std::pair{814, float{54.1516}},
    std::pair{815, float{54.6998}},
    std::pair{816, float{55.248}},
    std::pair{817, float{55.7961}},
    std::pair{818, float{56.3443}},
    std::pair{819, float{56.8924}},
    std::pair{820, float{57.4406}},
    std::pair{821, float{57.7278}},
    std::pair{822, float{58.015}},
    std::pair{823, float{58.3022}},
    std::pair{824, float{58.5894}},
    std::pair{825, float{58.8765}},
    std::pair{826, float{59.1637}},
    std::pair{827, float{59.4509}},
    std::pair{828, float{59.7381}},
    std::pair{829, float{60.0253}},
    std::pair{830, float{60.3125}},
};

// from https://doi.org/10.1145/3306346.3322964
std::pair<int, float> BMESE_wavelength_to_phase[]{
    std::pair{360, float{-3.141592654e+00f}},
    std::pair{365, float{-3.141592654e+00f}},
    std::pair{370, float{-3.141592654e+00f}},
    std::pair{375, float{-3.141592654e+00f}},
    std::pair{380, float{-3.141591857e+00f}},
    std::pair{385, float{-3.141590597e+00f}},
    std::pair{390, float{-3.141590237e+00f}},
    std::pair{395, float{-3.141432053e+00f}},
    std::pair{400, float{-3.140119041e+00f}},
    std::pair{405, float{-3.137863071e+00f}},
    std::pair{410, float{-3.133438967e+00f}},
    std::pair{415, float{-3.123406739e+00f}},
    std::pair{420, float{-3.106095749e+00f}},
    std::pair{425, float{-3.073470612e+00f}},
    std::pair{430, float{-3.024748900e+00f}},
    std::pair{435, float{-2.963566246e+00f}},
    std::pair{440, float{-2.894461907e+00f}},
    std::pair{445, float{-2.819659701e+00f}},
    std::pair{450, float{-2.741784136e+00f}},
    std::pair{455, float{-2.660533432e+00f}},
    std::pair{460, float{-2.576526605e+00f}},
    std::pair{465, float{-2.490368187e+00f}},
    std::pair{470, float{-2.407962868e+00f}},
    std::pair{475, float{-2.334138406e+00f}},
    std::pair{480, float{-2.269339880e+00f}},
    std::pair{485, float{-2.213127747e+00f}},
    std::pair{490, float{-2.162806279e+00f}},
    std::pair{495, float{-2.114787412e+00f}},
    std::pair{500, float{-2.065873394e+00f}},
    std::pair{505, float{-2.012511127e+00f}},
    std::pair{510, float{-1.952877310e+00f}},
    std::pair{515, float{-1.886377224e+00f}},
    std::pair{520, float{-1.813129945e+00f}},
    std::pair{525, float{-1.735366957e+00f}},
    std::pair{530, float{-1.655108108e+00f}},
    std::pair{535, float{-1.573400329e+00f}},
    std::pair{540, float{-1.490781436e+00f}},
    std::pair{545, float{-1.407519056e+00f}},
    std::pair{550, float{-1.323814008e+00f}},
    std::pair{555, float{-1.239721795e+00f}},
    std::pair{560, float{-1.155352390e+00f}},
    std::pair{565, float{-1.071041833e+00f}},
    std::pair{570, float{-9.869565245e-01f}},
    std::pair{575, float{-9.030071129e-01f}},
    std::pair{580, float{-8.190615375e-01f}},
    std::pair{585, float{-7.355051008e-01f}},
    std::pair{590, float{-6.533460267e-01f}},
    std::pair{595, float{-5.738969868e-01f}},
    std::pair{600, float{-4.987252020e-01f}},
    std::pair{605, float{-4.285345153e-01f}},
    std::pair{610, float{-3.638842841e-01f}},
    std::pair{615, float{-3.049676874e-01f}},
    std::pair{620, float{-2.519255365e-01f}},
    std::pair{625, float{-2.053018669e-01f}},
    std::pair{630, float{-1.653562553e-01f}},
    std::pair{635, float{-1.314421906e-01f}},
    std::pair{640, float{-1.029987187e-01f}},
    std::pair{645, float{-7.968764403e-02f}},
    std::pair{650, float{-6.109240127e-02f}},
    std::pair{655, float{-4.655459356e-02f}},
    std::pair{660, float{-3.541922943e-02f}},
    std::pair{665, float{-2.711363958e-02f}},
    std::pair{670, float{-2.108574265e-02f}},
    std::pair{675, float{-1.671688482e-02f}},
    std::pair{680, float{-1.346866146e-02f}},
    std::pair{685, float{-1.112524547e-02f}},
    std::pair{690, float{-9.497032344e-03f}},
    std::pair{695, float{-8.356318072e-03f}},
    std::pair{700, float{-7.571825815e-03f}},
    std::pair{705, float{-6.902675935e-03f}},
    std::pair{710, float{-6.366944858e-03f}},
    std::pair{715, float{-5.918354771e-03f}},
    std::pair{720, float{-5.533441575e-03f}},
    std::pair{725, float{-5.193919971e-03f}},
    std::pair{730, float{-4.886396950e-03f}},
    std::pair{735, float{-4.601974924e-03f}},
    std::pair{740, float{-4.334090492e-03f}},
    std::pair{745, float{-4.077698212e-03f}},
    std::pair{750, float{-3.829183156e-03f}},
    std::pair{755, float{-3.585922894e-03f}},
    std::pair{760, float{-3.346285814e-03f}},
    std::pair{765, float{-3.109230512e-03f}},
    std::pair{770, float{-2.873995576e-03f}},
    std::pair{775, float{-2.640047459e-03f}},
    std::pair{780, float{-2.406989618e-03f}},
    std::pair{785, float{-2.174597631e-03f}},
    std::pair{790, float{-1.942639389e-03f}},
    std::pair{795, float{-1.711031107e-03f}},
    std::pair{800, float{-1.479623979e-03f}},
    std::pair{805, float{-1.248404899e-03f}},
    std::pair{810, float{-1.017282362e-03f}},
    std::pair{815, float{-7.861339635e-04f}},
    std::pair{820, float{-5.577696588e-04f}},
    std::pair{825, float{-3.322621191e-04f}},
    std::pair{830, float{0.000000000e+00f}},
};

}// namespace luisa::test::spectrum